home *** CD-ROM | disk | FTP | other *** search
/ Amiga Collections: Franz PD / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).zip / Franz PD Disk #334 (1994-06)(Rhein-Sieg-Soft).adf / tracker.library / Demos / Lock.asm < prev    next >
Assembly Source File  |  1994-04-15  |  7KB  |  325 lines

  1. ;TestProgramm für "tracker.library"
  2.  
  3. ; Testet TRK_Lock, TRK_DupLock und TRK_Examine
  4.  
  5.     NOLIST
  6.     INCLUDE "exec/LVO.i"
  7.     INCLUDE "exec/memory.i"
  8.     INCLUDE "dos/LVO.i"
  9.     INCLUDE "dos/dosextens.i"
  10.     INCLUDE "libraries/tracker.i"
  11.     LIST
  12.  
  13. HEADLEN: EQU 32     ;soviel wird ausgegeben
  14.  
  15. Print:    MACRO
  16.     move.l    Output,d1
  17.     move.l    #\1,d2
  18.     CALLDOS VFPrintf
  19.     ENDM
  20.  
  21. _TrackerBase:    EQUR a5
  22. _DOSBase:    EQUR a4
  23. Output:     EQUR d7
  24. Buffer:     EQUR a3
  25.  
  26. ; WB-Message ?
  27.     sub.l    a1,a1        ;a1=0->eigener Task
  28.     CALLEXEC FindTask    ;Wo darf man denn nachschauen ?
  29.     move.l    d0,a0
  30.     tst.l    pr_CLI(a0)      ;von CLI oder WB aus gestartet ?
  31.     bne    fromCLI
  32. ;von WB aus:
  33.     lea    pr_MsgPort(a0),a0
  34.     move.l    a0,-(sp)
  35.     CALLEXEC WaitPort    ;auf Start-Message warten
  36.     move.l    (sp)+,a0
  37.     CALLEXEC GetMsg ;muß nachher beantwortet werden
  38.     move.l    d0,WBenchMsg
  39.  
  40. fromCLI:
  41. ; Tracker-Library öffnen
  42.     OPENLIB TrName
  43.     tst.l    d0
  44.     beq    ende_all
  45.     move.l    d0,_TrackerBase
  46.     TRK_OPENSTDLIB DOS,36
  47.     tst.l    d0
  48.     beq    ende_trk
  49.     move.l    d0,_DOSBase
  50.  
  51.     tst.l    WBenchMsg
  52.     bne    fromWB
  53. ;von CLI aus -> Ausgaben ins CLI-Fenster
  54.     CALLDOS Output
  55.     move.l    d0,Output
  56.     bra    main
  57. ;von WB aus gestartet -> eigenes Window nötig
  58. fromWB: move.l    #WdName,d1
  59.     move.l    #MODE_OLDFILE,d2
  60.     CALLTRK TRK_Open
  61.     move.l    d0,Output
  62. ;---------------------------------------------------------------------------
  63. ;Dateipuffer anlegen
  64.  
  65. main:    move.l    #HEADLEN,d0
  66.     move.l    #MEMF_ANY,d1
  67.     CALLTRK TRK_AllocMem
  68.     tst.l    d0
  69.     beq    ende_main
  70.     move.l    d0,Buffer
  71.  
  72. ;Haupt-Testteil
  73.  
  74. LOCK:    MACRO    ;Name
  75.     move.l    #\1,d1
  76.     bsr    Lock
  77.     ENDM
  78. UNLOCK: MACRO    ;Lock
  79.     move.l    \1,d1
  80.     bsr    UnLock
  81.     ENDM
  82. EXAMINE: MACRO    ;Lock
  83.     move.l    \1,d1
  84.     bsr    Examine
  85.     ENDM
  86. FREE:    MACRO    ;FIB
  87.     move.l    \1,d1
  88.     bsr    FreeFIB
  89.     ENDM
  90. SHORTINFO: MACRO ;FIB
  91.     move.l    \1,a0
  92.     bsr    ShortInfo
  93.     ENDM
  94. CMPFIB: MACRO    ;FIB1, FIB2
  95.     move.l    \1,a0
  96.     move.l    \2,a1
  97.     bsr    CmpFIB
  98.     ENDM
  99.  
  100. ;Test 1: Lock zu 's:Startup-Sequence' holen, dazu FIB holen und daraus
  101. ; Länge und Dateinamen lesen.
  102.     LOCK    Name_1
  103.     move.l    d0,d1
  104.     beq    3$
  105.     move.l    d0,-(sp)
  106.     bsr    DupLock
  107.     EXAMINE (sp)+
  108.     SHORTINFO d0
  109. ;Test 2: Lock zu 'l:' holen, dazu FIB holen und Dateinamen (und hoffentlich
  110. ; nicht -Länge) auslesen. Der Lock-BPTR wird vergessen.
  111. 3$:    LOCK    Name_2
  112.     move.l    d0,-(sp)
  113.     EXAMINE d0
  114.     move.l    d0,FIB_2
  115.     SHORTINFO d0
  116.     move.l    (sp)+,d1
  117.     beq    1$
  118.     bsr    DupLock
  119.     move.l    d0,DLock_2
  120.     EXAMINE d0
  121.     CMPFIB    FIB_2,d0
  122. ;Test 3: Lock zu 's:MakeShell' holen, dazu FIB holen und daraus Länge und
  123. ; Dateinamen lesen.
  124. 1$:    LOCK    Name_3
  125.     move.l    d0,Lock_3
  126.     EXAMINE d0
  127.     move.l    d0,FIB_3
  128.     SHORTINFO d0
  129. ;FIB_2 freigeben
  130.     FREE    FIB_2
  131. ;Test 4: Lock zu 'devs:MountList' holen, dazu FIB holen und daraus Länge und
  132. ; Dateinamen lesen.
  133.     LOCK    Name_4
  134.     move.l    d0,Lock_4
  135.     EXAMINE d0
  136.     move.l    d0,FIB_4
  137.     SHORTINFO d0
  138.     move.l    Lock_4,d1
  139.     beq    2$
  140.     bsr    DupLock
  141.     move.l    d0,DLock_4
  142.     EXAMINE d0
  143.     CMPFIB    FIB_4,d0
  144. ;Lock_3, DLock_2 und FIB_3 freigeben
  145. 2$:    FREE    FIB_3
  146.     UNLOCK    DLock_2
  147.     UNLOCK    Lock_3
  148. ;Test 5: Lock zu 'sys:' holen
  149.     LOCK    Name_5
  150.     move.l    d0,d1
  151.     beq    4$
  152.     bsr    DupLock
  153. ;Lock_4, DLock_4 freigeben
  154. 4$:    UNLOCK    Lock_4
  155.     UNLOCK    DLock_4
  156. ;---------------------------------------------------------------------------
  157.  
  158. ende_main:
  159. ;ggf. End-Botschaft und Verzögerung
  160.     tst.l    WBenchMsg
  161.     beq    ende_trk
  162.     move.l    Output,d1
  163.     move.l    #GoodBye,d2
  164.     moveq    #GoodByeLen,d3
  165.     CALLDOS Write
  166.     move.l    #150,d1
  167.     CALL    Delay
  168. ;Library schließen
  169. ende_trk:
  170.     CLOSELIB _TrackerBase
  171. ende_all:
  172.     tst.l    WBenchMsg    ;war da was ?
  173.     beq    toCLI        ;na dann halt nicht
  174. ;Message zur WB zurück
  175.     move.l    WBenchMsg,a1
  176.     CALLEXEC ReplyMsg
  177. toCLI:    moveq    #0,d0
  178.     rts
  179.  
  180. ;---------------------------------------------------------------------------
  181. ; Unterprogramm: File des Namens d1 locken
  182. ; Parameter: d1 = Namens-Zeiger
  183. ; Ergebnis: Lock-BPTR
  184.  
  185. Lock:    movem.l d1/d2,-(sp)
  186.     move.l    #ACCESS_READ,d2
  187.     CALLTRK TRK_Lock
  188.     move.l    d0,4(sp)
  189.     move.l    sp,d3
  190.     Print    Lock_Text
  191.     add.w    #4,sp
  192.     move.l    (sp)+,d0
  193.     rts
  194. ;---------------------------------------------------------------------------
  195. ; Unterprogramm: weiteres Lock erstellen
  196. ; Parameter: d1 = Original-Lock-BPTR
  197. ; Ergebnis: Kopie-Lock-BPTR
  198.  
  199. DupLock:
  200.     movem.l d1/d2,-(sp)
  201.     CALLTRK TRK_DupLock
  202.     move.l    d0,4(sp)
  203.     move.l    sp,d3
  204.     Print    DupLock_Text
  205.     add.w    #4,sp
  206.     move.l    (sp)+,d0
  207.     rts
  208. ;---------------------------------------------------------------------------
  209. ; Unterprogramm: zwei FIBs vergleichen
  210. ; Parameter: a0/a1 - die FIB-Adressen
  211. ; Ergebnis: -
  212.  
  213. CmpFIB: movem.l a0-a2,-(sp)     ;a2 = Platzhalter für Ergebnis-String
  214.     move.w    #fib_SIZEOF-1,d0
  215. 1$:    cmp.b    (a0)+,(a1)+
  216.     bne    2$
  217.     dbra    d0,1$
  218. ;gleich
  219.     move.l    #FIBS_equal,8(sp)
  220.     bra    3$
  221. ;ungleich
  222. 2$:    move.l    #FIBS_nonequal,8(sp)
  223. 3$:    move.l    sp,d3
  224.     Print    FIB_Text
  225.     add.w    #12,sp
  226.     rts
  227. ;---------------------------------------------------------------------------
  228. ; Unterprogramm: Lock d1 untersuchen
  229. ; Parameter: d1 = Lock-BPTR
  230. ; Ergebnis: FIB-Zeiger
  231.  
  232. Examine:
  233.     movem.l d1/d2,-(sp)
  234.     CALLTRK TRK_Examine
  235.     move.l    d0,4(sp)
  236.     move.l    sp,d3
  237.     Print    Examine_Text
  238.     add.w    #4,sp
  239.     move.l    (sp)+,d0
  240.     rts
  241. ;---------------------------------------------------------------------------
  242. ; Unterprogramm: Kurzinfo aus FIB generieren
  243. ; Parameter: a0 = FIB-Zeiger
  244. ; Ergebnis: -
  245.  
  246. ShortInfo:
  247.     tst.l    fib_DirEntryType(a0)
  248.     bmi    1$
  249. ;Directory:
  250.     pea    fib_FileName(a0)
  251.     move.l    sp,d3
  252.     Print    SI_Dir_Text
  253.     add.w    #4,sp
  254.     rts
  255. ;File:
  256. 1$:    move.l    fib_Size(a0),-(sp)
  257.     pea    fib_FileName(a0)
  258.     move.l    sp,d3
  259.     Print    SI_File_Text
  260.     add.w    #8,sp
  261.     rts
  262. ;---------------------------------------------------------------------------
  263. ; Unterprogramm: FIB freigeben
  264. ; Parameter: d1 = Zeiger auf den FIB
  265. ; Ergebnis: -
  266.  
  267. FreeFIB: tst.l    d1
  268.     bne    1$
  269.     rts
  270. 1$:    move.l    d1,-(sp)
  271.     CALLTRK TRK_FreeFIB
  272.     move.l    sp,d3
  273.     Print    Free_Text
  274.     add.w    #4,sp
  275.     rts
  276. ;---------------------------------------------------------------------------
  277. ; Unterprogramm: Lock freigeben
  278. ; Parameter: d1 = BPTR auf das Lock
  279. ; Ergebnis: -
  280.  
  281. UnLock: tst.l    d1
  282.     bne    1$
  283.     rts
  284. 1$:    move.l    d1,-(sp)
  285.     CALLTRK TRK_UnLock
  286.     move.l    sp,d3
  287.     Print    UnLock_Text
  288.     add.w    #4,sp
  289.     rts
  290. ;---------------------------------------------------------------------------
  291. WBenchMsg:    dc.l 0
  292.  
  293. DLock_2:    dc.l 0
  294. FIB_2:        dc.l 0
  295. Lock_3:     dc.l 0
  296. FIB_3:        dc.l 0
  297. Lock_4:     dc.l 0
  298. DLock_4:    dc.l 0
  299. FIB_4:        dc.l 0
  300.  
  301. TrName: TRACKERNAME
  302.  
  303. WdName:     dc.b "CON:0/0/640/200/Dos-Test für tracker.library",0
  304. GoodBye:    dc.b 10,"Bye - closing soon !"
  305. GoodByeLen:    equ *-GoodBye
  306. Name_1:     dc.b "s:Startup-Sequence",0
  307. Name_2:     dc.b "l:",0
  308. Name_3:     dc.b "s:MakeShell",0
  309. Name_4:     dc.b "devs:MountList",0
  310. Name_5:     dc.b "sys:",0
  311. CrLf:        dc.b 10,0
  312. ReadNN:     dc.b "%ld Bytes of File with FileHandle at 4*$%06lx read : ",10,0
  313. Lock_Text:    dc.b "Lock(",34,"%s",34,") returns $%06lx",10,0
  314. DupLock_Text:    dc.b "DupLock($%06lx) returns $%06lx",10,0
  315. UnLock_Text:    dc.b "Lock at 4*$%06lx freed",10,0
  316. Examine_Text:    dc.b "Examine($%06lx) returns FIB at $%06lx",10,0
  317. Free_Text:    dc.b "FIB at $%06lx freed",10,0
  318. SI_Dir_Text:    dc.b "The examined item was the directory %s",10,0
  319. SI_File_Text:    dc.b "The examined item was the file %s. It contains %ld Bytes",10,0
  320. FIBS_equal:    dc.b "are euqal",0
  321. FIBS_nonequal:    dc.b "differ",0
  322. FIB_Text:    dc.b "The FIBs at $%06lx and $%06lx %s",10,0
  323.  
  324.     END
  325.